<?php 



function watermark_funpast($imagename,$folder,$folder_thumb,$height_argu,$width_argu)

{



if (!isset($imagename))

{

	echo 'Error: no image was specified';

	exit();

}



$memoryToAllocate	= '100M';

$currentDir			= dirname(__FILE__);

$docRoot=$folder."/";

/*// Images must be local files, so for convenience we strip the domain if it's there

$image			= preg_replace('/^(s?f|ht)tps?:\/\/[^\/]+/i', '', (string) $_GET['image']);



// For security, directories cannot contain ':', images cannot contain '..' or '<', and

// images must start with '/'

if ($image{0} != '/' || strpos(dirname($image), ':') || preg_match('/(\.\.|<|>)/', $image))

{

	echo 'Error: malformed image path. Image paths must begin with \'/\'';

	exit();

}



// If the image doesn't exist, or we haven't been told what it is, there's nothing

// that we can do

if (!$image)

{

	echo 'Error: no image was specified';

	exit();

}



// Strip the possible trailing slash off the document root

$docRoot	= preg_replace('/\/$/', '', $_SERVER['DOCUMENT_ROOT']);*/



if (!file_exists($docRoot . $imagename))

{

	echo 'Error: image does not exist: ' . $docRoot . $imagename;

	exit();

}



// Get the size and MIME type of the requested image

$size	= GetImageSize($docRoot . $imagename);

$mime	= $size['mime'];



// Make sure that the requested file is actually an image

if (substr($mime, 0, 6) != 'image/')

{

	echo 'Error: requested file is not an accepted type: ' . $docRoot . $imagename;

	exit();

}



$width			= $size[0];

$height			= $size[1];



$maxWidth		= (isset($width_argu)) ? (int) $width_argu : 0;

$maxHeight		= (isset($height_argu)) ? (int) $height_argu : 0;





/*if (isset($_GET['color']))

	$color		= preg_replace('/[^0-9a-fA-F]/', '', (string) $_GET['color']);

else

	$color		= FALSE;*/



// If either a max width or max height are not specified, we default to something

// large so the unspecified dimension isn't a constraint on our resized image.

// If neither are specified but the color is, we aren't going to be resizing at

// all, just coloring.

if (!$maxWidth && $maxHeight)

{

	$maxWidth	= 99999999999999;

}

elseif ($maxWidth && !$maxHeight)

{

	$maxHeight	= 99999999999999;

}

elseif ($color && !$maxWidth && !$maxHeight)

{

	$maxWidth	= $width;

	$maxHeight	= $height;

}



// If we don't have a max width or max height, OR the image is smaller than both

// we do not want to resize it, so we simply output the original image and exit





// Ratio cropping

$offsetX	= 0;

$offsetY	= 0;



// if($height_argu>$height)
// 
// $maxHeight=$height;
// 
// if($width_argu>$width)
// 
// $maxHeight=$width;

$height_argu = '100px';
$width_argu = '70px';


// Setting up the ratios needed for resizing. We will compare these below to determine how to

// resize the image (based on height or based on width)

$xRatio		= $maxWidth / $width;

$yRatio		= $maxHeight / $height;



if ($xRatio * $height < $maxHeight)

{ // Resize the image based on width

	$tnHeight	= ceil($xRatio * $height);

	$tnWidth	= $maxWidth;

}

else // Resize the image based on height

{

	$tnWidth	= ceil($yRatio * $width);

 	$tnHeight	= $maxHeight;

}



// Before we actually do any crazy resizing of the image, we want to make sure that we

// haven't already done this one at these dimensions. To the cache!

// Note, cache must be world-readable



// We store our cached image filenames as a hash of the dimensions and the original filename

$resizedImageSource		= $tnWidth . 'x' . $tnHeight;

if ($color)

	$resizedImageSource	.= 'x' . $color;

if (isset($_GET['cropratio']))

	$resizedImageSource	.= 'x' . (string) $_GET['cropratio'];

$resizedImageSource		.= '-' . $imagename;



$resizedImage	= md5($resizedImageSource);

	

$resized		= $cacheDir . $resizedImage;



// Check the modified times of the cached file and the original file.

// If the original file is older than the cached file, then we simply serve up the cached file





// We don't want to run out of memory





// Set up a blank canvas for our resized image (destination)

$dst	= imagecreatetruecolor($tnWidth, $tnHeight);



// Set up the appropriate image handling functions based on the original image's mime type

switch ($size['mime'])

{



	case 'image/gif':

		// We will be converting GIFs to PNGs to avoid transparency issues when resizing GIFs

		// This is maybe not the ideal solution, but IE6 can suck it

		$creationFunction	= 'ImageCreateFromGif';

		$outputFunction		= 'ImagePng';

		$mime				= 'image/png'; // We need to convert GIFs to PNGs

		$doSharpen			= FALSE;

	break;

	

	case 'image/png':

		$creationFunction	= 'ImageCreateFromPng';

		$outputFunction		= 'ImagePng';

		$doSharpen			= FALSE;

	break;

	

	default:

		$creationFunction	= 'ImageCreateFromJpeg';

		$outputFunction	 	= 'ImageJpeg';

		$doSharpen			= TRUE;

	break;

}



// Read in the original image

$src	= $creationFunction($docRoot . $imagename);



if (in_array($size['mime'], array('image/gif', 'image/png')))

{

	if (!$color)

	{

		// If this is a GIF or a PNG, we need to set up transparency

		imagealphablending($dst, false);

		imagesavealpha($dst, true);

	}

	else

	{

		// Fill the background with the specified color for matting purposes

		if ($color[0] == '#')

			$color = substr($color, 1);

		

		$background	= FALSE;

		

		if (strlen($color) == 6)

			$background	= imagecolorallocate($dst, hexdec($color[0].$color[1]), hexdec($color[2].$color[3]), hexdec($color[4].$color[5]));

		else if (strlen($color) == 3)

			$background	= imagecolorallocate($dst, hexdec($color[0].$color[0]), hexdec($color[1].$color[1]), hexdec($color[2].$color[2]));

		if ($background)

			imagefill($dst, 0, 0, $background);

	}

}



// Resample the original image into the resized canvas we set up earlier

ImageCopyResampled($dst, $src, 0, 0, $offsetX, $offsetY, $tnWidth, $tnHeight, $width, $height);



if ($doSharpen)

{

	// Sharpen the image based on two things:

	//	(1) the difference between the original size and the final size

	//	(2) the final size

	//$sharpness	= findSharp($width, $tnWidth);

	

	$sharpenMatrix	= array(

		array(-1, -2, -1),

		array(-2, $sharpness + 12, -2),

		array(-1, -2, -1)

	);

	$divisor		= $sharpness;

	$offset			= 0;

	//imageconvolution($dst, $sharpenMatrix, $divisor, $offset);

}



// Write the resized image to the cache

$resized=$folder_thumb."/".$imagename;

$outputFunction($dst, $resized, -1);



// Send the new image to the browser





// Clean up the memory

ImageDestroy($src);

ImageDestroy($dst);





}

function findSharp($orig, $final) { // function from Ryan Rud (http://adryrun.com)

	$final	= $final * (750.0 / $orig);

	$a		= 52;

	$b		= -0.27810650887573124;

	$c		= .00047337278106508946;

	

	$result = $a + $b * $final + $c * $final * $final;

	

	return max(round($result), 0);

}

function linkimagesave($imagename,$folder,$height_argu,$width_argu,$save_filename)
{

$size	= GetImageSize($imagename);

$mime	= $size['mime'];


$width			= $size[0];

$height			= $size[1];

$maxWidth		= (isset($width_argu)) ? (int) $width_argu : 0;

$maxHeight		= (isset($height_argu)) ? (int) $height_argu : 0;



if (!$maxWidth && $maxHeight)

{

	$maxWidth	= 99999999999999;

}

elseif ($maxWidth && !$maxHeight)

{

	$maxHeight	= 99999999999999;

}

elseif ($color && !$maxWidth && !$maxHeight)

{

	$maxWidth	= $width;

	$maxHeight	= $height;

}



// If we don't have a max width or max height, OR the image is smaller than both

// we do not want to resize it, so we simply output the original image and exit





// Ratio cropping

$offsetX	= 0;

$offsetY	= 0;



if($height_argu>$height)

$maxHeight=$height;

if($width_argu>$width)

$maxHeight=$width;

// Setting up the ratios needed for resizing. We will compare these below to determine how to

// resize the image (based on height or based on width)

$xRatio		= $maxWidth / $width;

$yRatio		= $maxHeight / $height;



if ($xRatio * $height < $maxHeight)

{ // Resize the image based on width

	$tnHeight	= ceil($xRatio * $height);

	$tnWidth	= $maxWidth;

}

else // Resize the image based on height

{

	$tnWidth	= ceil($yRatio * $width);

 	$tnHeight	= $maxHeight;

}



// Before we actually do any crazy resizing of the image, we want to make sure that we

// haven't already done this one at these dimensions. To the cache!

// Note, cache must be world-readable



// We store our cached image filenames as a hash of the dimensions and the original filename

$resizedImageSource		= $tnWidth . 'x' . $tnHeight;

if ($color)

	$resizedImageSource	.= 'x' . $color;

if (isset($_GET['cropratio']))

	$resizedImageSource	.= 'x' . (string) $_GET['cropratio'];

$resizedImageSource		.= '-' . $imagename;



$resizedImage	= md5($resizedImageSource);

	

$resized		= $cacheDir . $resizedImage;



// Check the modified times of the cached file and the original file.

// If the original file is older than the cached file, then we simply serve up the cached file





// We don't want to run out of memory





// Set up a blank canvas for our resized image (destination)

$dst	= imagecreatetruecolor($tnWidth, $tnHeight);



// Set up the appropriate image handling functions based on the original image's mime type

switch ($size['mime'])

{



	case 'image/gif':

		// We will be converting GIFs to PNGs to avoid transparency issues when resizing GIFs

		// This is maybe not the ideal solution, but IE6 can suck it

		$creationFunction	= 'ImageCreateFromGif';

		$outputFunction		= 'ImagePng';

		$mime				= 'image/png'; // We need to convert GIFs to PNGs

		$doSharpen			= FALSE;

	break;

	

	case 'image/png':

		$creationFunction	= 'ImageCreateFromPng';

		$outputFunction		= 'ImagePng';

		$doSharpen			= FALSE;

	break;

	

	default:

		$creationFunction	= 'ImageCreateFromJpeg';

		$outputFunction	 	= 'ImageJpeg';

		$doSharpen			= TRUE;

	break;

}



// Read in the original image

$src	= $creationFunction($imagename);



if (in_array($size['mime'], array('image/gif', 'image/png')))

{

	if (!$color)

	{

		// If this is a GIF or a PNG, we need to set up transparency

		imagealphablending($dst, false);

		imagesavealpha($dst, true);

	}

	else

	{

		// Fill the background with the specified color for matting purposes

		if ($color[0] == '#')

			$color = substr($color, 1);

		

		$background	= FALSE;

		

		if (strlen($color) == 6)

			$background	= imagecolorallocate($dst, hexdec($color[0].$color[1]), hexdec($color[2].$color[3]), hexdec($color[4].$color[5]));

		else if (strlen($color) == 3)

			$background	= imagecolorallocate($dst, hexdec($color[0].$color[0]), hexdec($color[1].$color[1]), hexdec($color[2].$color[2]));

		if ($background)

			imagefill($dst, 0, 0, $background);

	}

}



// Resample the original image into the resized canvas we set up earlier

ImageCopyResampled($dst, $src, 0, 0, $offsetX, $offsetY, $tnWidth, $tnHeight, $width, $height);



if ($doSharpen)

{

	// Sharpen the image based on two things:

	//	(1) the difference between the original size and the final size

	//	(2) the final size

	//$sharpness	= findSharp($width, $tnWidth);

	

	$sharpenMatrix	= array(

		array(-1, -2, -1),

		array(-2, $sharpness + 12, -2),

		array(-1, -2, -1)

	);

	$divisor		= $sharpness;

	$offset			= 0;

	//imageconvolution($dst, $sharpenMatrix, $divisor, $offset);

}



// Write the resized image to the cache

$resized=$folder."/".$save_filename;

$outputFunction($dst, $resized, -1);



// Send the new image to the browser





// Clean up the memory

ImageDestroy($src);

ImageDestroy($dst);






}

?>



